home *** CD-ROM | disk | FTP | other *** search
/ World of Sound / World of Sound.iso / utils / miditools / kawaied / src / win.c < prev    next >
C/C++ Source or Header  |  1992-10-29  |  16KB  |  540 lines

  1. #include "inc.h"
  2. #include "defs.h"
  3. #include "gad.h"
  4. #include <signal.h>
  5.  
  6. struct TRStructure TxReq = { 0,0,0,0,0,0,NULL,0xFFFF,0,0,0,0,0,0 };
  7.  
  8. /* win.c */
  9. void Iconify(void);
  10. void Make_Screen(void);
  11. void Make_Window(void);
  12. void Make_SingleReqWindow(int xp, int yp);
  13. void Make_MultiReqWindow(int xp, int yp);
  14. void Make_SingleWindow(char *string);
  15. void Make_MultiWindow(char *string);
  16. void Make_PropWindow(int hoff);
  17. void Make_EnvWindow(void);
  18. void Print(struct Window *win, long x, long y, char *string);
  19. void ColPrint(struct Window *win, long x, long y, char *string);
  20. void MyCenter(struct Window *win, long y, char *string);
  21. void Line(struct Window *win, long x1, long y1, long x2, long y2);
  22. void About(void);
  23. short BoolRequest(char *mytext, char *yestext, char *notext);
  24. void SetTitle(char *string);
  25. int MyReq(char *text, char *postext, char *negtext);
  26.  
  27. extern struct Gadget Gadget1;
  28.  
  29. /**********************************************************************************/
  30. /***                                                                            ***/
  31. /**********************************************************************************/
  32.  
  33. void Iconify(void)
  34. {
  35.     int OLDSCREEN;
  36.  
  37.     OLDSCREEN=SCREEN;
  38.  
  39.     if (SCREEN != 0) 
  40.     {    
  41.         SCREEN=0;
  42.         CloseWindow(win);
  43.         CloseScreen(scr);
  44.         Make_Window();    
  45.     }
  46.     
  47.     SizeWindow(win,-(win->Width)+200,-(win->Height)+11);
  48.     MODWIN
  49. Loop:    WaitPort(win->UserPort);
  50.  
  51.     while(mesg=(struct IntuiMessage *) GetMsg(win->UserPort))
  52.     {
  53.         if (mesg->Class != MOUSEBUTTONS && mesg->Code != SELECTUP)
  54.         {
  55.             ReplyMsg((struct Message *) mesg);
  56.             goto Loop;
  57.         }
  58.         ReplyMsg((struct Message *) mesg);
  59.     }
  60.     Delay(10);
  61.  
  62. Loop1:    WaitPort(win->UserPort);
  63.     mesg=(struct IntuiMessage *) GetMsg(win->UserPort);
  64.  
  65.     if (mesg->Class == CLOSEWINDOW) 
  66.     {
  67.         ReplyMsg((struct Message *) mesg);
  68.         Quit();
  69.         goto Loop1;
  70.     }
  71.  
  72.     if (mesg->Class == ACTIVEWINDOW)
  73.     {
  74.         ReplyMsg((struct Message *) mesg);
  75.         SetColours();
  76.         goto Loop1;
  77.     }
  78.  
  79.     if (mesg->Class ==INACTIVEWINDOW)
  80.     {
  81.         ReplyMsg((struct Message *) mesg);
  82.         SetOldColours();
  83.         goto Loop1;
  84.     }
  85.  
  86.     if (mesg->Class != MOUSEBUTTONS && mesg->Code != MENUDOWN)
  87.     {
  88.         ReplyMsg((struct Message *) mesg);
  89.         goto Loop1;
  90.     }
  91.  
  92.     ReplyMsg((struct Message *) mesg);
  93.     
  94.     SCREEN=OLDSCREEN;
  95.  
  96.     if (SCREEN==0)
  97.     {
  98.         SetColours();
  99.         MoveWindow(win,-(win->LeftEdge),-(win->TopEdge));
  100.         SizeWindow(win,BREITE-win->Width-5,HOEHE-win->Height-1);
  101.         Delay(20);
  102.     }
  103.     else
  104.     {
  105.         SetOldColours();
  106.         CloseWindow(win);
  107.         Make_Screen();
  108.         Make_Window();
  109.     }    
  110.     Display();
  111. }
  112.  
  113. /**********************************************************************************/
  114. /***                                                                            ***/
  115. /**********************************************************************************/
  116.  
  117. void Make_Screen(void)
  118. {
  119.     struct NewScreen ns;
  120.  
  121.     if (textfont==NULL)
  122.     {
  123.         textattr.ta_Name = (STRPTR)"topaz.font";      
  124.         textattr.ta_YSize = TOPAZ_EIGHTY;              
  125.         textattr.ta_Style = FS_NORMAL;              
  126.         textattr.ta_Flags = FPF_ROMFONT;
  127.         textfont = (struct TextFont *) OpenFont(&textattr);
  128.     }
  129.  
  130.     ns.LeftEdge = 0;
  131.     ns.TopEdge = 0;
  132.     ns.Width = BREITE-1;
  133.     ns.Height = HOEHE+1;
  134.     ns.Depth = 2;
  135.     ns.DetailPen = 0;
  136.     ns.BlockPen = 1;
  137.     ns.ViewModes = HIRES|(WBLACE != 0 ? LACE : 0);
  138.     ns.Type = CUSTOMSCREEN;
  139.     ns.Font = &textattr;
  140.     ns.DefaultTitle =(char *)NULL; 
  141.     ns.Gadgets = NULL;
  142.     ns.CustomBitMap = NULL;
  143.  
  144.     scr=(struct Screen *) OpenScreen(&ns);
  145.     if (scr==NULL) Error("Can't open screen");
  146.  
  147.     if (scr != NULL)
  148.     {
  149.         FILE *fp,*fopen();
  150.         long a,b,c,d;
  151.  
  152.         fp=fopen("DEVS:K1-LibColours","r");
  153.         if (fp!=NULL)
  154.         {
  155.             fscanf(fp, "%ld%ld%ld%ld", &a, &b, &c, &d);
  156.             fclose(fp);
  157.             SetRGB4(&scr->ViewPort, 0, (a & 0xf00) >> 8, (a & 0x0f0) >> 4, a & 0x00f );
  158.             SetRGB4(&scr->ViewPort, 1, (b & 0xf00) >> 8, (b & 0x0f0) >> 4, b & 0x00f );
  159.             SetRGB4(&scr->ViewPort, 2, (c & 0xf00) >> 8, (c & 0x0f0) >> 4, c & 0x00f );
  160.             SetRGB4(&scr->ViewPort, 3, (d & 0xf00) >> 8, (d & 0x0f0) >> 4, d & 0x00f );
  161.         }
  162.     }
  163. }
  164.  
  165. /**********************************************************************************/
  166. /***                                                                            ***/
  167. /**********************************************************************************/
  168.  
  169. void Make_Window(void)
  170. {
  171.     struct NewWindow nw;
  172.     
  173.     Gadget1.LeftEdge=625-(SCREEN==1 ? 2 :0);
  174.  
  175.     nw.LeftEdge = 0;
  176.     nw.TopEdge = (SCREEN != 0 ? 1 : 0);
  177.     nw.Width = BREITE-1;
  178.     nw.Height = HOEHE-1;
  179.     nw.DetailPen = 0;
  180.     nw.BlockPen = 1;
  181.     nw.Title =(UBYTE *)"KAWAI K1-II Librarian V "VERSION"  Written by Andreas Jung in 1990-92";
  182.     nw.Flags = RMBTRAP|ACTIVATE|WINDOWCLOSE|REPORTMOUSE|SMART_REFRESH|(SCREEN == 0 ? WINDOWSIZING|WINDOWDRAG|WINDOWDEPTH : NULL) ;
  183.     nw.IDCMPFlags =NEWSIZE|CLOSEWINDOW|MOUSEBUTTONS|GADGETDOWN|GADGETUP;
  184.     nw.Type = (SCREEN != 0 ? CUSTOMSCREEN : WBENCHSCREEN);
  185.     nw.FirstGadget = &GadgetList1;
  186.     nw.CheckMark = NULL;
  187.     nw.Screen = (SCREEN != 0 ? scr :NULL);
  188.     nw.BitMap = NULL;
  189.     nw.MinWidth = 140;
  190.     nw.MinHeight = 10;
  191.     nw.MaxWidth = nw.Width;
  192.     nw.MaxHeight = nw.Height;
  193.  
  194.     win=(struct Window *) OpenWindow(&nw);
  195.     if (win==NULL) Error("Can't open main window");
  196.     rp=win->RPort;
  197.  
  198.     if (textfont==NULL)
  199.     {
  200.         textattr.ta_Name = (STRPTR)"topaz.font";      
  201.         textattr.ta_YSize = 8;              
  202.         textattr.ta_Style = 0;              
  203.         textattr.ta_Flags = 0;
  204.         textfont = (struct TextFont *) OpenFont(&textattr);
  205.         if (textfont != NULL) SetFont(rp,textfont);              
  206.     }
  207.  
  208.     myprocess = (struct Process *)FindTask((char *)0);
  209.     olderrorwindow = myprocess->pr_WindowPtr;
  210.     myprocess->pr_WindowPtr = (APTR)win;
  211. }
  212.  
  213. /**********************************************************************************/
  214. /***                                                                            ***/
  215. /**********************************************************************************/
  216.  
  217. void Make_SingleReqWindow(int xp,int yp)
  218. {
  219.     struct NewWindow nw;
  220.  
  221.     nw.LeftEdge = xp+win->LeftEdge;
  222.     nw.TopEdge = yp+win->TopEdge-10;
  223.     nw.Width = 130;
  224.     nw.Height = 73;
  225.     nw.DetailPen = 0;
  226.     nw.BlockPen = 2;
  227.     nw.Title =NULL;
  228.     nw.Flags = ACTIVATE|REPORTMOUSE|SMART_REFRESH ;
  229.     nw.IDCMPFlags = MOUSEBUTTONS;
  230.     nw.Type = (SCREEN != 0 ? CUSTOMSCREEN : WBENCHSCREEN);
  231.     nw.FirstGadget = NULL;
  232.     nw.CheckMark = NULL;
  233.     nw.Screen = (SCREEN != 0 ? scr :NULL);
  234.     nw.BitMap = NULL;
  235.     nw.MinWidth = 0;
  236.     nw.MinHeight = 0;
  237.     nw.MaxWidth = 0;
  238.     nw.MaxHeight = 0;
  239.  
  240.     win2=(struct Window *) OpenWindow(&nw);
  241.     if (win2==NULL) Error("Can't open single requester");
  242.     rp2=win2->RPort;
  243.     SetFont(rp2,textfont);
  244. }
  245.  
  246. /**********************************************************************************/
  247. /***                                                                            ***/
  248. /**********************************************************************************/
  249.  
  250. void Make_MultiReqWindow(int xp,int yp)
  251. {
  252.     struct NewWindow nw;
  253.  
  254.     nw.LeftEdge = xp+win->LeftEdge;
  255.     nw.TopEdge = yp+win->TopEdge-10;
  256.     nw.Width = 130;
  257.     nw.Height = 53;
  258.     nw.DetailPen = 0;
  259.     nw.BlockPen = 2;
  260.     nw.Title =NULL;
  261.     nw.Flags = ACTIVATE|REPORTMOUSE|SMART_REFRESH ;
  262.     nw.IDCMPFlags = MOUSEBUTTONS;
  263.     nw.Type = (SCREEN != 0 ? CUSTOMSCREEN : WBENCHSCREEN);
  264.     nw.FirstGadget = NULL;
  265.     nw.CheckMark = NULL;
  266.     nw.Screen = (SCREEN != 0 ? scr :NULL);
  267.     nw.BitMap = NULL;
  268.     nw.MinWidth = 0;
  269.     nw.MinHeight = 0;
  270.     nw.MaxWidth = 0;
  271.     nw.MaxHeight = 0;
  272.  
  273.     win6=(struct Window *) OpenWindow(&nw);
  274.     if (win6==NULL) Error("Can't open multi requester");
  275.     rp6=win6->RPort;
  276.     SetFont(rp6,textfont);
  277. }
  278.  
  279. /**********************************************************************************/
  280. /***                                                                            ***/
  281. /**********************************************************************************/
  282.  
  283. void Make_SingleWindow(char *string)
  284. {
  285.     struct NewWindow nw;
  286.  
  287.     nw.LeftEdge = 150;
  288.     nw.TopEdge = 0;
  289.     nw.Width = 430;
  290.     nw.Height = 180;
  291.     nw.DetailPen = 0;
  292.     nw.BlockPen = 1;
  293.     nw.Title =(UBYTE *)string;
  294.     nw.Flags = RMBTRAP|ACTIVATE|WINDOWCLOSE|REPORTMOUSE|SMART_REFRESH|(SCREEN == 0 ? WINDOWDRAG|WINDOWDEPTH : NULL) ;
  295.     nw.IDCMPFlags = NEWSIZE|CLOSEWINDOW|MOUSEBUTTONS;
  296.     nw.Type = (SCREEN != 0 ? CUSTOMSCREEN : WBENCHSCREEN);
  297.     nw.FirstGadget = NULL;
  298.     nw.CheckMark = NULL;
  299.     nw.Screen = (SCREEN != 0 ? scr :NULL);
  300.     nw.BitMap = NULL;
  301.     nw.MinWidth = 140;
  302.     nw.MinHeight = 20;
  303.     nw.MaxWidth = nw.Width;
  304.     nw.MaxHeight = nw.Height;
  305.  
  306.     Center(&nw,0,0);    
  307.     win3=(struct Window *) OpenWindow(&nw);
  308.     if (win3==NULL) Error("Can't open single window");
  309.     rp3=win3->RPort;
  310.     SetFont(rp3,textfont);
  311. }
  312.  
  313. /**********************************************************************************/
  314. /***                                                                            ***/
  315. /**********************************************************************************/
  316.  
  317. void Make_PropWindow(int hoff)
  318. {
  319.     struct NewWindow nw;
  320.  
  321.     nw.LeftEdge = 150;
  322.     nw.TopEdge = 0;
  323.     nw.Width = 140;
  324.     nw.Height = 33;
  325.     nw.DetailPen = 0;
  326.     nw.BlockPen = 1;
  327.     nw.Title =(char *)NULL;
  328.     nw.Flags = RMBTRAP|ACTIVATE|REPORTMOUSE|SMART_REFRESH;
  329.     nw.IDCMPFlags =NEWSIZE|CLOSEWINDOW|MOUSEBUTTONS|GADGETUP|GADGETDOWN;
  330.     nw.Type = (SCREEN != 0 ? CUSTOMSCREEN : WBENCHSCREEN);
  331.     nw.FirstGadget = NULL;
  332.     nw.CheckMark = NULL;
  333.     nw.Screen = (SCREEN != 0 ? scr :NULL);
  334.     nw.BitMap = NULL;
  335.     nw.MinWidth = 140;
  336.     nw.MinHeight = 20;
  337.     nw.MaxWidth = nw.Width;
  338.     nw.MaxHeight = nw.Height;
  339.  
  340.     Center(&nw,hoff,0);    
  341.     win4=(struct Window *) OpenWindow(&nw);
  342.     if (win4==NULL) Error("Can't open prop-window");
  343.     rp4=win4->RPort;
  344.     SetFont(rp4,textfont);
  345. }
  346.  
  347. /**********************************************************************************/
  348. /***                                                                            ***/
  349. /**********************************************************************************/
  350.  
  351. void Make_EnvWindow(void)
  352. {
  353.     struct NewWindow nw;
  354.  
  355.     nw.LeftEdge = 260;
  356.     nw.TopEdge = 21;
  357.     nw.Width = 196;
  358.     nw.Height = 55;
  359.     nw.DetailPen = 0;
  360.     nw.BlockPen = 1;
  361.     nw.Title =(char *)NULL;
  362.     nw.Flags =NOCAREREFRESH;
  363.     nw.IDCMPFlags =MOUSEBUTTONS;
  364.     nw.Type = (SCREEN != 0 ? CUSTOMSCREEN : WBENCHSCREEN);
  365.     nw.FirstGadget = NULL;
  366.     nw.CheckMark = NULL;
  367.     nw.Screen = (SCREEN != 0 ? scr :NULL);
  368.     nw.BitMap = NULL;
  369.     nw.MinWidth = 0;
  370.     nw.MinHeight = 0;
  371.     nw.MaxWidth = 0;
  372.     nw.MaxHeight = 0;
  373.  
  374.     win5=(struct Window *) OpenWindow(&nw);
  375.     if (win5==NULL) Error("Can't open env-window");
  376.     rp5=win5->RPort;
  377.     SetFont(rp5,textfont);
  378. }
  379.  
  380. /**********************************************************************************/
  381. /***                                                                            ***/
  382. /**********************************************************************************/
  383.  
  384. void Make_MultiWindow(char *string)
  385. {
  386.     struct NewWindow nw;
  387.  
  388.     nw.LeftEdge = 150;
  389.     nw.TopEdge = 0;
  390.     nw.Width = 230;
  391.     nw.Height = 180;
  392.     nw.DetailPen = 0;
  393.     nw.BlockPen = 1;
  394.     nw.Title =(UBYTE *)string;
  395.     nw.Flags = RMBTRAP|ACTIVATE|WINDOWCLOSE|REPORTMOUSE|SMART_REFRESH|(SCREEN == 0 ? WINDOWDRAG|WINDOWDEPTH : NULL) ;
  396.     nw.IDCMPFlags = NEWSIZE|CLOSEWINDOW|MOUSEBUTTONS;
  397.     nw.Type = (SCREEN != 0 ? CUSTOMSCREEN : WBENCHSCREEN);
  398.     nw.FirstGadget = NULL;
  399.     nw.CheckMark = NULL;
  400.     nw.Screen = (SCREEN != 0 ? scr :NULL);
  401.     nw.BitMap = NULL;
  402.     nw.MinWidth = 140;
  403.     nw.MinHeight = 20;
  404.     nw.MaxWidth = nw.Width;
  405.     nw.MaxHeight = nw.Height;
  406.  
  407.     Center(&nw,0,0);    
  408.     win7=(struct Window *) OpenWindow(&nw);
  409.     if (win7==NULL) Error("Can't open multi window");
  410.     rp7=win7->RPort;
  411.     SetFont(rp7,textfont);
  412. }
  413.  
  414.  
  415. /**********************************************************************************/
  416. /***                                                                            ***/
  417. /**********************************************************************************/
  418.  
  419. void Print(struct Window *win,long x,long y,char *string)
  420. {
  421.     SetAPen(win->RPort,1);
  422.     SetBPen(win->RPort,0);
  423.     Move(win->RPort,x,y);
  424.     Text(win->RPort,string,strlen(string));
  425. }
  426.  
  427. /**********************************************************************************/
  428. /***                                                                            ***/
  429. /**********************************************************************************/
  430.  
  431. void ColPrint(struct Window *win,long x,long y,char *string)
  432. {
  433.     SetAPen(win->RPort,2);
  434.     SetBPen(win->RPort,0);
  435.     Move(win->RPort,x,y);
  436.     Text(win->RPort,string,1);
  437.     if (strlen(string)>1)
  438.     {
  439.         SetAPen(win->RPort,1);    
  440.         Move(win->RPort,x+8,y);
  441.         Text(win->RPort,&string[1],strlen(string)-1);
  442.     }
  443. }
  444.  
  445. /**********************************************************************************/
  446. /***                                                                            ***/
  447. /**********************************************************************************/
  448.  
  449. void MyCenter(struct Window *win,long y,char *string)
  450. {
  451.     SetAPen(win->RPort,1);
  452.     SetDrMd(win->RPort,JAM2);
  453.     Move(win->RPort,(win->Width)/2-strlen(string)*4,y);
  454.     Text(win->RPort,string,strlen(string));
  455. }
  456.  
  457. /**********************************************************************************/
  458. /***                                                                            ***/
  459. /**********************************************************************************/
  460.  
  461. void Line(struct Window *win,long x1,long y1,long x2,long y2)
  462. {
  463.     Move(win->RPort,x1,y1);
  464.     Draw(win->RPort,x2,y2);
  465. }
  466.  
  467. /**********************************************************************************/
  468. /***                                                                            ***/
  469. /**********************************************************************************/
  470.  
  471. void About(void)
  472. {
  473.     MyReq("\
  474.                 Kawai K1-II Librarian Version "VERSION"\n"
  475.     "                       Release: "__DATE__"\n\n"
  476.     "                       Written in 1990-92 by \n"
  477.     "                            Andreas Jung\n"
  478.     "                          Klosterstraße 21\n"
  479.     "                          D-6602 Dudweiler\n"
  480.     "                    Federal Republic of Germany\n\n"
  481.     "  This program is freeware and may be freely distributed  \n"
  482.     "  for noncommercial use. Commercial distribution requieres \n"
  483.     "  the written permission of the author. All rights reserved !\n\n"
  484.     "  The K1-Librarian uses the Midi-library and the Req-library.\n"
  485.     "  Midi-library is (C) 1987, 1988 by Pregnant Badger Music.\n"
  486.     "  Req-library is (C) 1989 by Colin Fox and Bruce Dawson.\n\n"
  487.     "  Sleepy mouse pointer written by Timm Martin.\n\n"
  488.     "  Input handler written by Paris E. Bingham Jr.\n\n"
  489.     "  Special thanks to Michael Balzer for his famous K1-editor,\n"
  490.     "  the sources and the Req-library documentation. Thank you.\n",NULL," Ok ");
  491. }
  492.  
  493. /**********************************************************************************/
  494. /***                    Stinknormaler Boolrequester                             ***/
  495. /**********************************************************************************/
  496.  
  497. BOOL BoolRequest(char *mytext,char *yestext,char *notext)
  498. {
  499.     struct IntuiText text=
  500.     { 0,1,JAM1,17,10,NULL,NULL,NULL };
  501.     struct IntuiText postext=
  502.     { 0,1,JAM1,7,4,NULL,NULL,NULL };
  503.     struct IntuiText negtext=
  504.     { 0,1,JAM1,7,4,NULL,NULL,NULL };
  505.  
  506.     text.IText      =(UBYTE *)    mytext;
  507.     postext.IText=(UBYTE *)    yestext;
  508.     negtext.IText=(UBYTE *)    notext;
  509.     
  510.     return(AutoRequest(NULL,&text,&postext,&negtext,NULL,NULL,strlen(mytext)*9+30,55));
  511. }
  512.  
  513. /**********************************************************************************/
  514. /***                        Setzen des Fenstertitels                                ***/
  515. /**********************************************************************************/
  516.  
  517. void SetTitle(char *string)
  518. {
  519.     SetWindowTitles(win,string,(char *)-1);
  520. }
  521.  
  522. /**********************************************************************************/
  523. /***                                                                            ***/
  524. /**********************************************************************************/
  525.  
  526. int MyReq(char *text,char *postext,char *negtext) 
  527. {
  528.     TxReq.Text            = text;
  529.     TxReq.NegativeText    = negtext;
  530.     TxReq.PositiveText    = postext;
  531.     TxReq.MiddleText     = NULL;
  532.     TxReq.Title            = NULL;
  533.     TxReq.versionnumber = REQVERSION;
  534.     TxReq.Timeout        = 25;
  535.     TxReq.Window        = win;
  536.  
  537.     return TextRequest(&TxReq);
  538. }
  539.  
  540.